#include "config.h"
#include "isr.h"

#define SYSTICK
#define EXTI

#ifdef SYSTICK

// SysTick interrupt handler - called every 1 ms (configured by SysConfig)
void SysTick_Handler(void)
{
	msTicks++;
}
#endif

#ifdef EXTI
// Group1 interrupt handler - handles GPIOA and GPIOB interrupts
void GROUP1_IRQHandler(void)
{
	// 处理 GPIOA 中断 (EC11按键)
	switch (DL_GPIO_getPendingInterrupt(ENCODER_EC11_KEY_PORT))
	{
	case ENCODER_EC11_KEY_IIDX: // EC11按键中断
		encoderEvent = 1;							 // 设置编码器事件标志
		DL_GPIO_clearInterruptStatus(ENCODER_EC11_KEY_PORT, ENCODER_EC11_KEY_PIN); // 清除中断标志
		break;
	default:
		break;
	}
	
	// 处理 GPIOB 中断 (EC11旋转)
	switch (DL_GPIO_getPendingInterrupt(ENCODER_EC11_A_PORT))
	{
	case ENCODER_EC11_A_IIDX: // A相中断
		if ((DL_GPIO_readPins(ENCODER_EC11_B_PORT, ENCODER_EC11_B_PIN) & ENCODER_EC11_B_PIN) == 0) // 检测B脚状态
		{
			encoder_count++; // 顺时针旋转
		}
		else
		{
			encoder_count--; // 逆时针旋转
		}
		encoderEvent = 1; // 设置编码器事件标志
		DL_GPIO_clearInterruptStatus(ENCODER_EC11_A_PORT, ENCODER_EC11_A_PIN); // 清除A相中断标志
		break;
	default:
		break;
	}
}
#endif
